{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/ext_36_run_1/1/AstroCNNModel_extended_20220418_220440',\n",
       " '/mnt/tess/astronet/checkpoints/ext_36_run_1/2/AstroCNNModel_extended_20220418_223806',\n",
       " '/mnt/tess/astronet/checkpoints/ext_36_run_1/3/AstroCNNModel_extended_20220418_231105',\n",
       " '/mnt/tess/astronet/checkpoints/ext_36_run_1/4/AstroCNNModel_extended_20220418_234404',\n",
       " '/mnt/tess/astronet/checkpoints/ext_36_run_1/5/AstroCNNModel_extended_20220419_001704',\n",
       " '/mnt/tess/astronet/checkpoints/ext_36_run_1/6/AstroCNNModel_extended_20220419_005009',\n",
       " '/mnt/tess/astronet/checkpoints/ext_36_run_1/7/AstroCNNModel_extended_20220419_012323',\n",
       " '/mnt/tess/astronet/checkpoints/ext_36_run_1/8/AstroCNNModel_extended_20220419_015632',\n",
       " '/mnt/tess/astronet/checkpoints/ext_36_run_1/9/AstroCNNModel_extended_20220419_022933',\n",
       " '/mnt/tess/astronet/checkpoints/ext_36_run_1/10/AstroCNNModel_extended_20220419_030247']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/ext_36_run_1'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-36-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v13-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "2491 records\n",
      "Running model 2\n",
      "2491 records\n",
      "Running model 3\n",
      "2491 records\n",
      "Running model 4\n",
      "2491 records\n",
      "Running model 5\n",
      "2491 records\n",
      "Running model 6\n",
      "2491 records\n",
      "Running model 7\n",
      "2491 records\n",
      "Running model 8\n",
      "2491 records\n",
      "Running model 9\n",
      "2491 records\n",
      "Running model 10\n",
      "2491 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('astro_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_e', 'disp_n', 'disp_j', 'disp_s', 'disp_b']\n",
    "\n",
    "col_e = labels.index('disp_e')\n",
    "thresh = 0.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for ex_id in preds.index:\n",
    "        if ex_id not in agg_preds:\n",
    "            agg_preds[ex_id] = []\n",
    "\n",
    "        row = preds[preds.index == ex_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {ex_id}')\n",
    "        if pred_v[col_e] >= thresh:\n",
    "            agg_preds[ex_id].append('disp_e')\n",
    "        else:\n",
    "            masked_v = [v if i != col_e else 0 for i, v in enumerate(pred_v)]\n",
    "            agg_preds[ex_id].append(preds.columns[np.argmax(masked_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_preds = []\n",
    "for ex_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[ex_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'astro_id': ex_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('astro_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0, low_memory=False)\n",
    "tce_table['astro_id'] = tce_table['Astro ID']\n",
    "tce_table = tce_table.set_index('astro_id')\n",
    "for l in labels:\n",
    "    tce_table[l] = tce_table[l[:-1] + l[-1].upper()]\n",
    "tce_labels = tce_table[labels + ['TIC ID']]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='astro_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.9846743295019157\n",
      "Precision: 0.7099447513812155\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_e_p'] > 0)\n",
    "pos = (pl['disp_e'] > 0)\n",
    "\n",
    "pneg = (pl['disp_e_p'] == 0)\n",
    "neg = (pl['disp_e'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "334227600\n",
      "118412801\n",
      "158159741\n",
      "141753278\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg]['TIC ID']:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "252588526\n",
      "164528404\n",
      "332870317\n",
      "192591652\n",
      "198555242\n",
      "431338538\n",
      "278910035\n",
      "16740282\n",
      "91987762\n",
      "237278147\n",
      "277848886\n",
      "154214348\n",
      "279064110\n",
      "136651206\n",
      "269291226\n",
      "468608862\n",
      "97487520\n",
      "82242456\n",
      "202685576\n",
      "405687343\n",
      "127846210\n",
      "298647682\n",
      "469465627\n",
      "138847344\n",
      "284266496\n",
      "56861756\n",
      "395164445\n",
      "257048642\n",
      "123489614\n",
      "186483050\n",
      "267924099\n",
      "648359612\n",
      "274510104\n",
      "188258751\n",
      "101496204\n",
      "122577745\n",
      "1254504863\n",
      "200323039\n",
      "241855882\n",
      "30318046\n",
      "335588842\n",
      "406277413\n",
      "74885707\n",
      "842068824\n",
      "356822358\n",
      "387568679\n",
      "18178958\n",
      "165500081\n",
      "261814771\n",
      "408945155\n",
      "283330382\n",
      "219880693\n",
      "356776209\n",
      "371070027\n",
      "278555119\n",
      "27896467\n",
      "375927073\n",
      "409455240\n",
      "14209654\n",
      "21133246\n",
      "417208086\n",
      "308805406\n",
      "154271808\n",
      "1400086045\n",
      "159636125\n",
      "230197530\n",
      "320356995\n",
      "404934011\n",
      "419611478\n",
      "404851508\n",
      "407615704\n",
      "167039826\n",
      "201601338\n",
      "31868634\n",
      "30275847\n",
      "291374558\n",
      "30722286\n",
      "404851966\n",
      "384341508\n",
      "113496703\n",
      "309650507\n",
      "261205462\n",
      "167309408\n",
      "406971913\n",
      "276738707\n",
      "373919592\n",
      "446698252\n",
      "40602499\n",
      "404851552\n",
      "319865847\n",
      "183978683\n",
      "177309966\n",
      "326693475\n",
      "293527927\n",
      "311103813\n",
      "299945796\n",
      "279475851\n",
      "300153494\n",
      "404733023\n",
      "348957284\n",
      "379191982\n",
      "281578420\n",
      "410087746\n",
      "277045346\n",
      "199376584\n"
     ]
    }
   ],
   "source": [
    "for i in pl[neg & ppos]['TIC ID']:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>astro_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>0.022890</td>\n",
       "      <td>0.287101</td>\n",
       "      <td>0.954274</td>\n",
       "      <td>0.013066</td>\n",
       "      <td>0.098700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>0.089768</td>\n",
       "      <td>0.268334</td>\n",
       "      <td>0.850962</td>\n",
       "      <td>0.013706</td>\n",
       "      <td>0.071733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>0.014189</td>\n",
       "      <td>0.254812</td>\n",
       "      <td>0.976890</td>\n",
       "      <td>0.006133</td>\n",
       "      <td>0.064631</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>0.275941</td>\n",
       "      <td>0.280015</td>\n",
       "      <td>0.669470</td>\n",
       "      <td>0.007276</td>\n",
       "      <td>0.052003</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>0.293262</td>\n",
       "      <td>0.233573</td>\n",
       "      <td>0.600856</td>\n",
       "      <td>0.004744</td>\n",
       "      <td>0.079062</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>0.303522</td>\n",
       "      <td>0.226982</td>\n",
       "      <td>0.631944</td>\n",
       "      <td>0.007804</td>\n",
       "      <td>0.053399</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>0.034375</td>\n",
       "      <td>0.292017</td>\n",
       "      <td>0.936042</td>\n",
       "      <td>0.007071</td>\n",
       "      <td>0.086588</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>0.005786</td>\n",
       "      <td>0.203824</td>\n",
       "      <td>0.983114</td>\n",
       "      <td>0.006492</td>\n",
       "      <td>0.109582</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>0.028705</td>\n",
       "      <td>0.305460</td>\n",
       "      <td>0.951059</td>\n",
       "      <td>0.008402</td>\n",
       "      <td>0.065230</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>0.010864</td>\n",
       "      <td>0.251087</td>\n",
       "      <td>0.974565</td>\n",
       "      <td>0.006262</td>\n",
       "      <td>0.077843</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            disp_e    disp_n    disp_j    disp_s    disp_b\n",
       "astro_id                                                  \n",
       "26515     0.022890  0.287101  0.954274  0.013066  0.098700\n",
       "26515     0.089768  0.268334  0.850962  0.013706  0.071733\n",
       "26515     0.014189  0.254812  0.976890  0.006133  0.064631\n",
       "26515     0.275941  0.280015  0.669470  0.007276  0.052003\n",
       "26515     0.293262  0.233573  0.600856  0.004744  0.079062\n",
       "26515     0.303522  0.226982  0.631944  0.007804  0.053399\n",
       "26515     0.034375  0.292017  0.936042  0.007071  0.086588\n",
       "26515     0.005786  0.203824  0.983114  0.006492  0.109582\n",
       "26515     0.028705  0.305460  0.951059  0.008402  0.065230\n",
       "26515     0.010864  0.251087  0.974565  0.006262  0.077843"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == pl[pl['TIC ID'] == 1254504863].index.values[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e_p</th>\n",
       "      <th>disp_n_p</th>\n",
       "      <th>disp_j_p</th>\n",
       "      <th>disp_s_p</th>\n",
       "      <th>disp_b_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "      <th>TIC ID</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>astro_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1254504863</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          disp_e_p  disp_n_p  disp_j_p  disp_s_p  disp_b_p  maxcount  disp_e  \\\n",
       "astro_id                                                                       \n",
       "26515            3         0         7         0         0         7       0   \n",
       "\n",
       "          disp_n  disp_j  disp_s  disp_b      TIC ID  \n",
       "astro_id                                              \n",
       "26515          0       5       0       2  1254504863  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == pl[pl['TIC ID'] == 1254504863].index.values[0]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "ids = set(ensemble_preds[0].index.values)\n",
    "\n",
    "index = {v: i for i, v in enumerate(ids)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        ex_id, pred_e = row[0], row[1][col_e]\n",
    "        pred_es[i][index[ex_id]] = pred_e\n",
    "\n",
    "lbl_es = np.zeros([len(index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    ex_id, lbl_e = row[0], row[1]['disp_e']\n",
    "    lbl_es[index[ex_id]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = int(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = int(np.sum(pred_pos))\n",
    "    num_true_pos = int(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.975307112022389, max R: 1.0, max P: 1.0\n",
      "100% recall at: 42%, threshold: 0.015999403953606828\n"
     ]
    },
    {
     "data": {
      "image/png": "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lV5+djr7nRWbHu1TDayGmTVL+jtFV26RokvmJuaxxx579fHll0c7l3R2dk74h79mzRodc8wxevnll7V169YxyxYtWqSzzjpLw8PDY9ZXtGHDBjU1NenZZ5/V3r17xyxbuXKlli1bpgMHDmjz5rHndm1vb9e5554rSdq4ceOEDcb69evV1tamHTt2aPfu3WOWLVu2TCtXrlRXV5eeeOKJMcuampq0YcMGSdKmTZsmbGzOPvtsHXHEEdq1a5d27tw5Ztmxxx6rU045RX19fRO+VzPTZZddJil6D8dvlE877TQdffTReumll7Rt27Yxy4466iidccYZGhoaKvseXnzxxWpoaNDWrVu1f//+MctWrVqlpUuXat++fers7ByzrKOjQ+vWrZOksus9//zz1dLSou3bt2vPnj1jli1fvlwrVqzQoUOHtGnTpjHLCoWCLrjgAknSk08+OeE/grVr12rhwoXauXOndu3aNWbZ8ccfr5NPPlk9PT0Taqqvr9cll0RHmW3evHnCxv7000/X4sWLtXv3bj333HOS9Or3vHjxYp1++ukaHBws+71eeumlMjNt2bJFBw8eHLNs9erVOu5tueRxAAAgAElEQVS44/TKK69oy5YtY5YtXLhQa9eulbuXXe+FF16o5uZmbdu2Ta+88sqYZSeeeKJOOOEEHThwQE8//fSYZa2trTrvvPMkSY8//viE/2DWrVunjo4O7dy5Uy+88MKYZUuXLtWqVavU1dWlxx9/fMyyxsZGXXTRRZKkp556asJ/TmeeeaaOPPJIvfjii9qxY8eYZUuWLNGpp56q/v7+st8r24hIGtuI559/XosXL2YbMYNtRBHbiEgWtxHFD/EjIyMT/j1KbCOK+BwRmc/bCEkT3mO2ERE+R0Tm8zZi/L/jrLMQT7BjZssk/TJ++vfu/ptTjP+lor08nnX3VXNYxzckfTB++h13f181r7/pppteI2mnJL3zne/U4sWLX13W0NCgQqGgkZGRV/8TKH7QKH1M9zWf3de8/YVm//796uzs1Jo1a9Ta2spfcat8D/kLzfzYRvT09Kizs/PVD+psI7L9V1y2ETPf02Pz5s0655xzZGYT1ss2IsLniMh83UYcOnRIGzdufPVzy3TeQ7YRET5HjMryNuLKz92lKwYfKS5adsMNN1Q8eiJtoTY9jpZUbFHf7u7XTDH+JUlLJD3l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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs, ths = ([], [], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    ps.append(p)\n",
    "    rs.append(r)\n",
    "    ths.append(th)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "i = len(rs) - 1\n",
    "while rs[i] == 1.0:\n",
    "    i -= 1\n",
    "i += 1\n",
    "print(f'100% recall at: {int(ps[i] * 100)}%, threshold: {ths[i]}')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
